# -*- coding:utf-8 -*-

import os
import time

from Util import testSuite, logger, util, config
import pytest

nowDate = time.strftime('%Y-%m-%d', time.localtime())


def testSetup():
    """
    测试前准备工作
    :return:
    """
    # 获取bas服务菜单、单据编码对应关系
    try:
        result = util.getBasMenuCategoryRelation()
    except Exception as e:
        logger.error(f'未获取到业务报账菜单配置，已终止测试，错误信息：{str(e)}')
        return
    else:
        if not result:
            logger.error('未获取到业务报账菜单配置，已终止测试')
            return
    # 读取测试用例
    testCases = testSuite.readTestCase()  # list,测试脚本的相对路径
    for i in testCases:
        logger.info(f'收集到了测试用例：{i}')

    util.saveHistoryRecordData()
    return testCases


def testRunning(testCases):
    """
    测试执行
    :return:
    """
    # 执行测试用例
    """
    (1)‘-s’：关闭捕捉，输出打印信息。
    (2)‘-v’:用于增长测试用例的冗长。
    """
    pytest.main([*testCases, '-v', '-s', '--alluredir', './Report/allure-results', '--clean-alluredir'])


def testTeardown():
    """
    测试结束工作
    :return:
    """
    # 生成测试报告
    os.system('allure generate ./Report/allure-results -o ./Report/allure-reports --clean')
    # 重置报告名称
    util.resetReportName()
    # 存储历史数据
    util.resetHistoryData()
    # 删除历史图片数据
    util.deleteImages()
    logger.info('已删除7天前的图片数据')
    # 压缩备份测试报告
    util.make_archive(os.path.join(config.rootPath, '..', 'UIReportBackup', f'report_{nowDate}'),
                      os.path.join(config.rootPath, 'Report', 'allure-results'))
    # 启动allure服务器
    # os.system('cd Report')
    # os.system('allure serve -h 0.0.0.0 -p 9999')


def main():
    testCases = testSetup()
    testRunning(testCases)
    testTeardown()


if __name__ == '__main__':
    main()
